﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace parser
{
    class PatternKeyStructure
    {
        private bool es_select = false;
        private bool es_update = false;
        private bool es_insert = false;
        private bool es_tiene_where = false;
        private bool es_delete = false;
        private bool es_tiene_group_by = false;
        private ISet<string> tablas= new HashSet<string>();

        public ISet<string> Tablas
        {
            get { return tablas; }
            set { tablas = value; }
        }


        public bool Es_insert
        {
            get { return es_insert; }
            set { es_insert = value; }
        }

        public bool Es_update
        {
            get { return es_update; }
            set { es_update = value; }
        }

        public bool Es_delete
        {
            get { return es_delete; }
            set { es_delete = value; }
        }

        public bool Es_tiene_where
        {
            get { return es_tiene_where; }
            set { es_tiene_where = value; }
        }

        public bool Es_tiene_group_by
        {
            get { return es_tiene_group_by; }
            set { es_tiene_group_by = value; }
        }
        
        public bool Es_select
        {
            get { return es_select; }
            set { es_select = value; }
        }


        //private bool EsIgualA(PatternKeyStructure otro)
        //{
        //    bool result =  otro.es_delete == this.es_delete;
        //    result &=      otro.es_insert == this.es_insert;
        //    result &=      otro.es_update == this.es_update;
        //    result &=      otro.es_tiene_where == this.es_tiene_where;
        //    result &=      otro.es_tiene_group_by == this.es_tiene_group_by;
        //    result &=      SonLasMismasTablas(this.tablas, otro.tablas);
        //    return result;
        //}

        //private bool SonLasMismasTablas(ISet<string> tablas1, ISet<string> tablas2)
        //{
        //    //como use conjuntos esta piola

        //    return tablas1.SetEquals(tablas2);
        //}

        public string Serializar()
        {
            string tablas_serializadas = "";
            foreach (string tabla in tablas)
            {
                tablas_serializadas += tabla + "; ";
            }

            string resultado= "";
            if (es_select)
            {
                resultado += "SELECT ... ";
            }
            if (es_update)
            {
                resultado += "UPDATE ... ";
            }
            if (es_delete)
            {
                resultado += "DELETE ... ";
            }
            if (es_insert)
            {
                resultado += "INSERT ... ";
            }

            if (es_tiene_where)
            {
                resultado += " WHERE ... ";
            }

            if (es_tiene_group_by)
            {
                resultado += " GROUP BY ... ";
            }

            resultado += " FROM: {" + tablas_serializadas + "}";
 
            return resultado;
        }

    }
}

